const { ipcRenderer } = require('electron');

/**
 * 界面元素
 * @author zoulei
 */
const elements = {
    startBtn: document.getElementById('startBtn'),
    stopBtn: document.getElementById('stopBtn'),
    statusDot: document.getElementById('statusDot'),
    statusText: document.getElementById('statusText'),
    message: document.getElementById('message')
};

/**
 * 显示消息
 * @param {string} text - 消息文本
 * @param {string} type - 消息类型 (success, error, info)
 */
function showMessage(text, type = 'info') {
    elements.message.textContent = text;
    elements.message.className = `message ${type} show`;
    
    setTimeout(() => {
        elements.message.classList.remove('show');
    }, 3000);
}

/**
 * 更新服务器状态显示
 * @param {boolean} running - 服务器是否运行
 */
function updateStatus(running) {
    if (running) {
        elements.statusDot.className = 'status-dot running';
        elements.statusText.textContent = '运行中';
        elements.startBtn.disabled = true;
        elements.stopBtn.disabled = false;
    } else {
        elements.statusDot.className = 'status-dot stopped';
        elements.statusText.textContent = '已停止';
        elements.startBtn.disabled = false;
        elements.stopBtn.disabled = true;
    }
}

/**
 * 启动服务器
 */
async function startServer() {
    try {
        elements.startBtn.disabled = true;
        showMessage('正在启动服务器...', 'info');
        
        const result = await ipcRenderer.invoke('start-server');
        
        if (result.success) {
            updateStatus(true);
            showMessage(result.message, 'success');
        } else {
            updateStatus(false);
            showMessage(result.message, 'error');
        }
    } catch (error) {
        updateStatus(false);
        showMessage('启动服务器时发生错误: ' + error.message, 'error');
    }
}

/**
 * 停止服务器
 */
async function stopServer() {
    try {
        elements.stopBtn.disabled = true;
        showMessage('正在停止服务器...', 'info');
        
        const result = await ipcRenderer.invoke('stop-server');
        
        if (result.success) {
            updateStatus(false);
            showMessage(result.message, 'success');
        } else {
            updateStatus(true);
            showMessage(result.message, 'error');
        }
    } catch (error) {
        updateStatus(true);
        showMessage('停止服务器时发生错误: ' + error.message, 'error');
    }
}

/**
 * 检查服务器状态
 */
async function checkServerStatus() {
    try {
        const status = await ipcRenderer.invoke('get-server-status');
        updateStatus(status.running);
    } catch (error) {
        console.error('检查服务器状态失败:', error);
    }
}

/**
 * 事件监听器
 */
function setupEventListeners() {
    // 启动按钮点击事件
    elements.startBtn.addEventListener('click', startServer);
    
    // 停止按钮点击事件
    elements.stopBtn.addEventListener('click', stopServer);
    
    // 页面加载完成后检查状态
    document.addEventListener('DOMContentLoaded', () => {
        checkServerStatus();
    });
}

/**
 * 初始化应用
 * @author zoulei
 */
function init() {
    setupEventListeners();
    
    // 定期检查服务器状态
    setInterval(checkServerStatus, 5000);
}

// 启动应用
init(); 